perm filename CHANGE.TXT[WEB,ALS] blob sn#641346 filedate 1982-02-11 generic text, type T, neo UTF8
This page describes differences between TEX82, which is the portable
standard definition of TEX in PASCAL, and the TEX systems written in SAIL.
(The SAIL version will NOT be brought up to date to make it compatible with
TEX82; its use should gradually die away as more people take advantage of
the new features available in the PASCAL version.)

* TEX82 does all its calculations that affect line breaking and page
breaking using fixed-point integer arithmetic of limited (i.e., 32-bit)
precision, instead of with floating-point computations, since different
machines differ so widely in the results you get with floating point.

Dimensions are integers in units of 2↑(-16) points, limited in magnitude
to 2↑14 points (which is 18.89 feet).  This applies to all dimensions
(e.g., the heights and widths and depths of boxes, the amounts by which
you \raise or \lower a box, \varunits, etc.), except for the dimensions
of stretching and shrinking. 

Something different had to be done with respect to the dimensions of stretching
and shrinking, since for example the old TEX defined \hfill to be a stretch
of 10↑10 points, and that number has more than 32 bits to the left of its
binary point. After considering various alternatives, the solution introduced
by the designers of MESA-TEX in 1979 has been adopted for TEX82. Each
stretch or shrink dimension is specified by a fixed point integer that is
either in units of 2↑(-16)pt or 2↑(-16)fil or 2↑(-16)fill or 2↑(-16)filll.
Here pt is, of course, one point; the other units are three orders of
infinity, essentially infinity and infinity↑2 and infinity↑3. To add together
such units of stretching or shrinking, one simply adds the individual
components having the same order of infinity, and then uses the nonzero
component having the highest order. 

Thus, when one says "\hskip <a>pt plus <b>fil minus <c>filll", the numbers
<a>, <b>, <c> are rounded to the nearest multiple of 2↑(-16), and their
magnitudes should be less than 2↑(15). The stretch component is
<b> times infinity, and the shrink component is <c> times infinity cubed.

* The shrink component of all glue used in a paragraph should be finite.
Something like "\hskip 20pt minus 2fil" actually makes no sense in a paragraph,
since the paragraph would fit on a single line no matter what. Infinite
shrinkage does make sense in a simple \hbox, of course.

* Identifiers for control sequences in TEX82 are letter strings of any
length, with upper and lower case letters treated as distinct even when
they aren't the first letter. For example, \TEX is not the same as \TeX,
and \GAMMA is not the same as \Gamma.  Any character that is regarded as a
letter (this means the 52 letters, initially, plus others that are
\chcoded to 11) can appear in such control sequences. Of course, the
one-character non-letter control sequences still exist as well.

* Font codes (which appear after \font or \: or \mathrm, etc.) are allowed
to be any nonnegative numbers, up to a certain limit (e.g. 200). Thus,
\font A is equivalent to \font '101 and to \font 65, because of the
recently added rule that most characters can be used in place of
constants. In this way, TEX82 is not curtailed by a 64-font restriction.

* Both \looseness and \parshape are now reset to their default values after each
paragraph, as \hangindent always was.

* A somewhat more major change: \hangindent parameters for \hbox par should
now be given outside the box instead of inside. Namely, one should now say
	\hangindent 15pt\hbox par 200pt{...}
instead of
	\hbox par 200pt{\hangindent 15pt ...}
as the old manual states. In olden times you had to give all other aspects of
\hbox par outside (e.g., the baselineskip, parshape), so the new conventions
are more consistent.

* An even more major change: \chpar has been abolished. In its place, all
of the integer parameters have names instead of numbers. (Thus at last they
become consistent with the dimension parameters \hsize, etc., and with the
glue parameters \baselineskip, etc. My only excuse for bad design in the
first place was that the integer parameters were afterthoughts, stuck in
after TEX was first up and running; it was the easiest way to vary some
of the originally fixed constants. I wanted to finish TEX in a year and
get on to writing Volume 4! That is still my wish.) The main effect of this
change is to delete a few definitions from basic.tex and other macro packages.

Here are the names of the integer parameters:
\tracing	(formerly \chpar0=)	diagnostic output
\jpar		(formerly \chpar1=)	badness tolerance after hyphenation
\ipar		(formerly \chpar15=)	badness tolerance before hyphenation
\hpen		(formerly \chpar2=)	hyphenation penalty
\penpen		(formerly half of \chpar3=) penultimate line hyphenation penalty
\dhpen		(formerly half of \chpar3=) double-hyphen penalty
\wpen		(formerly \chpar4=)	widow line penalty
\bpen		(formerly \chpar5=)	broken line at page end penalty
\binoppen	(formerly \chpar6=)	math binary op break penalty
\relpen		(formerly \chpar7=)	math relation break penalty
\ragged		(formerly \chpar8=)	raggedness ratio
\disppen	(formerly \chpar9=)	penalty for breaking before a display
\radsign	(formerly \chpar11=)	radical sign
\mag		(formerly \chpar12=)	1000 x magnification ratio
\adjpen		(formerly \chpar13=)	adjacent incompatibility penalty
\looseness	(formerly \chpar14=)	change in paragraph length
\uchyph		(formerly \chpar16=)	uppercase hyphenation
\exhyph		(formerly \chpar17=)	explicit hyphenation penalty
\day		(new)			initialized to current day of month
\month		(new)			initialized to current month of year
\year		(new)			initialized to current year
\time		(new)			initialized to minutes since midnight
\parinspen	(new)			see below

The former \chpar10 (dump window) is no longer needed, since TEX82 has better 
ways to display token lists. The former \chpar18, \chpar19, \chpar20, once
"reserved for extensions", are gone too, since it is now best for a TEX extender
to give names to whatever new parameters are needed. Similarly, \x is gone.

* The new \jpar and \jjpar are devalued by a factor of 100 from the old ones.
In other words, the default is now \jpar 200 and \jjpar 200, so that it is
a true "badness tolerance", i.e., the badness should not exceed 200. Any
value of 8128 or more is equivalent to an infinite value, in which glue
can stretch arbitrarily far. 

* Furthermore, \codeval and \parval are eliminated. In their place is a
much more powerful operator called \the. For example, what used to be
"\codeval5" is now "\the\chcode5"; what used to be "\parval2" is now
"\the\hpen". You can even say "\the\:" to get the current font number,
"\the\hsize" to get the current \hsize as a dimension, "\the\baselineskip"
to get the current \baselineskip as a glue value; and you can say things
like "\vbox to \the\baselineskip", which makes a vbox whose height is the
normal amount of baselineskip (exclusive of stretching and shrinking).
If \the occurs in an \xdef or in text or in a send stream message, it
gets expanded (analogous to \count, but there's no use of roman numerals).
Indeed, to suppress conversion of negative \counts to roman numerals you
can now say \the\count.

* \thebox is changed to \lastbox (avoids confusion with \the).

* \minus is like \the, but gives the negative value.

* An array of ten dimension values is introduced, called \dimen0 to \dimen9.
These join \count0 to \count9 and \skip0 to \skip9, so we now have ten of
each basic quantity. Furthermore `3.5dm8' is a dimension equal to 3.5 times
\dimen8.

*Operations on \count, \dimen, and \skip are extended, so that we now have
a complete set:

	\setcount <digit> = <number>
	\advcount <digit> by <number>
	\multcount <digit> by <number>
	\divcount <digit> by <number>

	\setdimen <digit> = <dimen>
	\advdimen <digit> by <dimen>
	\multdimen <digit> by <number>
	\divdimen <digit> by <number>

	\setskip <digit> = <glue>
	\advskip <digit> by <glue>
	\multskip <digit> by <number>
	\divskip <digit> by <number>

Note that \specskip has changed its name to \setskip. The division operations
truncate towards zero.

* In fact, all the things that used to be 0 to 9 are further extended: they
can run from 0 to 255. This applies to \count, \dimen, \skip, \send, and \box.
BASIC.TEX will contain macros for allocating a new \count or \dimen, etc.

* The = sign in \setcount, \setdimen, \setskip, \chcode, \font, \open, \let,
and in other similar things, is now optional. Furthermore an equals sign
is optionally allowed now after \jpar, \hsize, \baselineskip, \setbox
(the new name for \save), etc.

* If you put \global in front of \def or \let or \chcode or \jpar or
\baselineskip or even \: and \parshape and \hangindent, the definition will
now be global. Otherwise the definition is local (except for \gdef and \xdef).
This is a change in the case of dimension parameters:  \varunit,
\parindent, \lineskiplimit, \mathsurround, \maxdepth, \topbaseline,
\hsize, \vsize; you should put \global in front of these to get the former
behavior. You probably wanted the former behavior only when changing
\hsize or \vsize in an \output routine.

* \edef is a local \xdef. Both \edef and \xdef can now take arguments
like \def and \gdef.

* Two other modifiers can be placed in front of \def, \gdef, \edef and \xdef:
	\long means that the arguments to the macro are allowed to contain
		\par tokens; formerly this was always allowed, but now it
		is permitted only for "long" macros. Otherwise TEX will now
		stop when it sees \par going into an argument, presuming
		that a right brace was forgotten. This detects one of the
		most frequent errors made by TEX users, before it propagates
		to overflow the memory.
	\outer means that the macro being defined is not allowed to appear
		subsequently either in an argument or in the right-hand side
		of a definition or send text, or in the preamble of an
		alignment. In other words, the macro should appear only at
		"quiet" times. This is another way to catch missing braces
		before too much damage is done. It used to be applied at the
		end of 	every page, but most TEX users don't use a page-oriented
		editor like E; therefore TEX82 does not treat file pages as
		an integral part of its control structure.

* \groupbegin and \groupend provide an alternate way to enter and leave
groups for locally defined values. A \groupbegin will not match a },
nor will { match \groupend; the former gives the message "Missing \groupend
inserted" when the } occurs, and the latter inserts a "missing" }. Note
that you can introduce \groupbegin in one macro and \groupend in another.

* If you say \message{text}, the terminal will display " text" immediately.
For example, the new version of BASIC.TEX contains three message statements
so that when you \input basic your screen will look something like this:
	(basic.tex macros fonts layout)
instead of "(basic.tex 1 2 3 4)". (However, one hardly ever needs to
say \input basic any more, as explained below.)

Here's an example macro that displays names of sections when you get to them
in a paper you are TEXing:
  \outer\def\section#1{\vfill\eject\message{#1}\ctrline{\bf#1}}

* You can also say \errmessage{text}, which causes a TEX error message like
	! text.

* \mathcode<n> replaces \chcode <n+128>.

* The internal character set used by TEX82 is the same regardless of the
external character set. There is no longer a difference like
"\chcode'176" for right brace that applies only at SAIL! Right braces
and underlines and tildes and notequals and a few others have been a
source of problems that have now gone away. Furthermore there is now a
way to input an ascii control character to any version of TEX82 by typing,
e.g., ↑↑A.

TEX82 assumes that all of the standard ascii characters, shown in positions
040 through 176 below, are available; these characters are always converted
to their standard ascii codes. For example, a TEX user who types A is asking
for character 65 of the current font, even though the A might have entered the
computer in EBCDIC or some other code. Non-standard-ascii characters might
also be readable on some implementations of TEX. In such cases they should
have the significance stated below, for best results; and all characters that
cannot be converted to a compatible TEX code should be converted to 177.
	ascii	TEX	description	chcode	mathcode (when TEX starts)
	000	↑↑@	null		ignore	bin401
	001	↑↑A	downarrow	submark	rel443
	002	↑↑B	alpha		other	ord213
	003	↑↑C	beta		other	ord214
	004	↑↑D	and		other	bin536
	005	↑↑E	not		other	ord472
	006	↑↑F	epsilon		other	ord217
	007	↑↑G	pi		other	ord231
	010	↑↑H	backspace,lambda ignore	ord225
	011	↑↑I	tab,gamma	space	ord215
	012	↑↑J	linefeed,delta	ignore	ord216
	013	↑↑K	uparrow		supmark	rel442
	014	↑↑L	formfeed,+/-	endline	bin406
	015	↑↑M	carriage-return	endline	bin410
	016	↑↑N	infinity	other	ord461
	017	↑↑O	partial		other	ord245
	020	↑↑P	subset		other	rel432
	021	↑↑Q	superset	other	rel433
	022	↑↑R	intersection	other	bin534
	023	↑↑S	union		other	bin533
	024	↑↑T	for-all		other	ord470
	025	↑↑U	there-exists	other	ord471
	026	↑↑V	circle-times	other	bin412
	027	↑↑W	doublearrow	other	rel444
	030	↑↑X	leftarrow	other	rel440
	031	↑↑Y	rightarrow	other	rel441
	032	↑↑Z	notequal	other	rel434
	033	↑↑[	escape,diamond	action	bin567
	034	↑↑\	less-or-equal	other	rel424
	035	↑↑]	greater-or-equal other	rel425
	036	↑↑↑	equivalence	other	rel421
	037	↑↑_	or		other	bin537
	040		space		space	ord464
	041	!	exclamation	other	close041
	042	"	double-quote	other	close042
	043	#	hashmark	param	ord561
	044	$	dollar-sign	math	ord577
	045	%	percent-sign	comment	ord045
	046	&	ampersand	align	ord046
	047	'	apostrophe	other	close047
	050	(	left-parenthesis other	open050
	051	)	right-parenthesis other close051
	052	*	asterisk	other	ord052
	053	+	plus-sign	other	bin053
	054	,	comma		other	punct054
	055	-	hyphen,minus-sign other	bin400
	056	.	period		other	ord056
	057	/	slash		other	ord057
	060	0	zero		other	ord060
	   . . .
	071	9	nine		other	ord071
	072	:	colon		other	rel072
	073	;	semicolon	other	punct073
	074	<	less-than-sign	other	rel074
	075	=	equal-sign	other	rel075
	076	>	greater-than-sign other	rel076
	077	?	question-mark	other	close077
	100	@	at-sign		other	ord574
	101	A	uppercase-A	letter	ord301
	   . . .
	132	Z	uppercase-Z	letter	ord332
	133	[	left-bracket	other	open133
	134	\	backslash	control	bin404
	135	]	right-bracket	other	close135
	136	↑	caret		supmark	ord017
	137	_	underline	submark	ord465
	140	`	reverse-apostrophe other open140
	141	a	lowercase-a	letter	ord341
	   . . .
	172	z	lowercase-z	letter	ord372
	173	{	left-brace	open	open546
	174	|	vertical-line	other	ord552
	175	}	right-brace	close	close547
	176	~	tilde		other	rel430
	177	↑↑?	invalid		invalid	ord573

As before, the mathcodes (which replace Appendix F8 of the old TEX manual)
are relevant only when the chcode is letter or other. (See below for the
new chcode values.) Two possibilities are given for codes 010, 011,
012, 014, 033, 055; at most one of these should be chosen, and if both are
present on some system keyboards the other should probably be disallowed for
TEX input (mapped into 177). However, since a user can change any chcode and
any math chcode, strict conformity with these interpretations isn't absolutely
necessary. To convert a file into a format that all TEXes can read, one
should change null into ↑↑@, downarrow into ↑↑A, and so on. If a character
set contains uparrow but not caret (e.g., the SAIL system falls into this
category), the uparrow should be considered an ascii caret; code 013 will
be used only if both uparrow and caret are present, as they are at MIT.
Incidentally, this internal coding scheme is based on a scheme used at MIT,
since the MIT code is faithful to ascii while allowing additional visible
characters that are extremely convenient.

An appearance of ↑↑A is equivalent to an appearance of ascii code 001, if
the current chcode of ↑ is supmark. In particular, if somebody in a
foreign country with more than 26 letters in the local alphabet wants to make
\chcode ↑↑A = letter, then control sequences like \a↑↑A↑↑Ab (a four letter
word) are permissible.

TEX82 puts 015 (ascii carriage-return) at the end of each line, except for
the lines that are inserted with "i" after error messages. If the final
character of the line is currently chcoded to be an escape character
(e.g., if you end an error-insertion with \, or if you do \chcode'15=0),
the result is control-null, which is an undefined control sequence unless
you define \↑↑@.

Of course, users are expected to type \ne instead of ↑↑Z if their system's
character set doesn't contain a not-equal sign; TEX82 recognizes ↑↑Z as
ascii 032 primarily to make it possible for straightforward translation of
TEX files from one system so that they will work on another.

Some files contain ascii 014 (form-feed) characters as page marks. Such
characters are ordinarily treated like carriage-returns, since the initial
chcode for 014 is carret. In order to get TEX82 to do the error checking at
the end of a page, as the old TEX did, you can say
	\chcode'14=13 \outer\def↑↑L{\par}

* A new chcode value 14 denotes a character that is better for comments
than the present code 5. A character of code 14 denotes end of the current
line (i.e., ignore the remainder of that line), without inserting a blank
space, and without considering that line to be all blank.  Thus, if % is
assigned type 14, you can have lines that are completely comments by
starting them with %, without having this line come out as \par; and you
can also end a line with % without having a blank space inserted there.

* Another new chcode value, 15, denotes an invalid character. When such
a character is input, TEX82 issues an error message.

* Here's something that was NOT put into TEX82: It wouldn't be hard to
make TEX understand \escape to mean 0, \opengroup to mean 1, ..., \active
to mean 13, \comment to mean 14, and \invalid to mean 15; then you could
say, e.g., \chcode'14=\active in the example above. But it seems wrong
to make \chcode too easy, since that will only encourage more people to
fiddle with the \chcode table. Let's leave this a black art, to be
resorted to only with reluctance in times of emergency.

* Note that the backslash character is now predefined as an escape character
when TEX82 begins. The old idea about letting the user's first nonblank
character be the escape has been abandoned. Furthermore TEXPRE has been
replaced by a version of TEX called INITEX that allows an entire macro
package to be preloaded; this macro package can define its own chcodes
and mathcodes. The normal version of TEX already has "basic.tex"
preloaded; the normal version of AMSTEX already has the AMSTEX macros
and fonts preloaded.

The new rule for starting TEX is this: If the first nonblank characters
typed are ! or !!, TEX goes into nonstop mode (i.e., no waiting for
terminal input); here !! is "quiet nonstop mode", in which the output
goes entirely to the error-transcript file, not the terminal.
(These nonstop options are intended for overnight batch processing.)
After scanning off the optional !'s, TEX looks at the next nonblank
character. If it is not an escape character, TEX automatically inserts
"\input ". Furthermore, the input may start right on the command line.
Thus, for example, the following ways of starting TEX are equivalent
at SAIL and similar sites:
	tex paper
			r tex;paper
					r tex
					* paper
							r tex
							*\input paper
(The asterisks here are TEX's prompt character. On TOPS-20 what used to
be "@tex paper/", indicating batch mode, is now "@tex !paper".)

* \dump <filename> will save TEX's current memory contents on the specified
file. This is allowed in INITEX only, and only at very quiet times (i.e.,
at group level 0 in vertical mode with nothing on the current page, etc.).
The file name will be printed later when these memory contents are loaded
in a production version of TEX; for example, if you say "\dump BASIC"
on March 1, 1982, the TEX that uses the dumped file might begin with the line
	This is TEX, Version 1 (BASIC 82.3.1)

* Actually the program name TEX now stands only for versions of TEX82 that
have BASIC.TEX preloaded. Other preloaded versions (e.g. AMSTEX) will
usually exist too. If your operating system does not allow a program to
start with its memory preloaded, you will have to call a "virgin TEX"
program VIRTEX that first wants to see the name of a format-dump file (e.g.,
BASIC or AMSTEX).  In this case a typical calling sequence might be
"@virtex basic !paper".  If your operating system is nice enough to allow
preloaded programs, a typical way to create the program TEX would be to
say "@virtex basic" followed by something like "control-C" and "save tex".

* You CAN do certain things now in horizontal mode, e.g., \vfill; TEX82
will silently insert the \par you forgot.

* \discr <number> (analogous to \accent <number>) makes discretionary
characters other than hyphens.

* \close <number> will close a file so that your TEX program can immediately
input it. (Previously you could only do this by, e.g., \open 0=empty0.tmp,
cluttering up the disk with an empty file.)

* \indent takes you from vertical mode to horizontal mode and indents the
paragraph; this can be used if the first item in the paragraph is in an
\hbox or \vbox. You can also use \indent in horizontal mode to stand for
"\hbox to\the\parindent{}". For example, you might say 
	\hbox par 100pt{\indent This paragraph is indented.}

* \↑↑\ and \↑↑] have gone away, to the delight of people who don't have
nice ways to type ascii control characters. Instead, \- in math mode
precedes a space of any other type, making that space zero in subscript
styles. Thus, the conditional thin space is now "\-\,", and conditional
negative thin space is "\-\!".

* \opspace, \thinspace, \thickspace are now definable like other
glue parameters such as \baselineskip. The units should be in mu. For
example, one of the defaults is \thickspace 5mu plus 5mu.
"\ " in math mode is equivalent to "\,". The old "mathspace"
parameter in symbol fonts (see METAFONT manual p99) is no longer used.

* If you end the parameter part of a definition with an additional #,
the argument-matching process will terminate on the next left brace.
For example, in
	\def\chop to #1#{\chopp{#1}}
the call "\chop to 2in{x}" will expand to "\chopp{2in}{x}". The definition
	\def\mac#{why}
will subsequently issue an error message if "\mac" is not followed by "{".

* There's a new way to get up to 4096 more math symbols in all three sizes,
by defining font families 0 to 15. For example, suppose that fonts A, D, and F
are Fraktur alphabets in 10pt, 7pt, and 5pt sizes. Then you can define
"\fontfamily 1=ADF", which is something like the code "\mathrm adf" in
basic.tex. Now if you say "\fam1" in math mode, you get characters from
font A, D, or F, depending on the size. For example, "{\fam1 B↓b}" would
give Fraktur B in 10pt with a subscript Fraktur b in 7pt. The rule is
that a family specification overrides the math chcode for symbols of
type letter and otherchar. If you say "\fam1" in horizontal mode, it is
equivalent to "\:A"; i.e., the largest size is used then. Thus if, say,
\bf is defined to be an appropriate family, you can use the notation "{\bf t}"
both in horizontal mode and in math mode.  And if \rm is defined to be an
appropriate family, e.g., by saying
	\fontfamily 0=adf \def\rm{\fam0}
you can now say, e.g., "\def\max{\mathop{\rm max}}" instead of resorting
to "{\char m \char a \char x}" in order to achieve size-switching. This
extension also makes ligatures and kerning available in math mode.

* The "texinfo" that is given with each font (see Appendix F of the
METAFONT manual) can now be changed by a TEX user program; there was no
way to do this before except by making a new TFM file. Say
	\texinfo <font><parameternumber>=<dimen>
For example, \texinfo a3=4pt sets the stretch component of spacing to 4pt
in font a. (Parameter 1, the "slant", is unitless but you should give its
value in units of points.) You can use this feature to adjust math-mode
positioning of subscripts, etc., by changing the parameters in mathsy
and mathex fonts. Note that texinfo is global, it does not get reset
at the end of a group. You can also say \the\texinfo<font><parameternumber>.

* Bit '40 of the \tracing parameter now means that debugging output goes to
the terminal as well as to the error-transcript file; otherwise it goes only to
the error file. Bit '4 now means that statistics about memory usage will
be printed after each page of output, provided that TEX has been compiled
with the statistics-gathering feature. Bit '1 now turns on a warning about
reference to characters that do not exist in a font; such characters will
not be typeset.

* A new dimension parameter \overlimit specifies the tolerance for printing
a diagnostic message about overfull boxes. If the box is overfull by this
amount or less, no message is printed. Default is ".1pt", which was the
old TEX standard. If you say \overlimit 8000pt, you probably won't see any
overfull boxes. If you say \overlimit 0pt, you will see all of them, including
a few that you didn't know about last year.

* Another new dimension parameter \overfullrule specifies the width of a
rule that is added at the right end of overfull hboxes. This rule has the
height and depth of the box. If \overfullrule is zero or negative, or if
the amount of overfullness does not exceed \overlimit, no rule will appear.
Default is 5pt, which gives a big black mark to help you spot overfull boxes. 

* The "overfull box" warning messages will be given in a new form that
simply gives the characters in the box; for example,
	Overfull box, 3.3326 points too wide (in paragraph of lines 210--216):
	\:a This is the text of a line that was over-full for some rea-son.
Discretionary hyphens are shown as real hyphens, so that you can see what
hyphenation TEX was trying.  The error-transcript file gets both this message
and an old-style description of the overfull box in detailed diagnostic
dump format.

* Another new control sequence, \relax, does nothing at all. Thus, if you
want to disable the action of a control sequence, you can \let it be \relax.

* Up to 256 fonts may be used, and each font may contain up to 256
characters. (Characters numbered 128 to 255 can be accessed either
via ligatures or charlists or with the \char command.)

* \leftskip and \rightskip specify glue to be placed at the left and right
of each line of a paragraph. This provides better ways to do ragged right
setting, and it makes changes to \hsize less necessary.

* \parinsert{stuff} is a new feature intended for long footnotes. It
acts like \botinsert{\hbox par size{stuff}} except that only the first
line of the paragraph is required to fit on the current page. Line breaks
between lines are allowed (with \parinspen added to the other penalties
corresponding to \wpen and \bpen); and if such a break occurs, the remaining
lines are carried over to the following page where they are treated in
the same way (i.e., the first line must appear, but another break could occur).

* \xsend{text} will send the text to the DVI file instead of to a text file.
Thus, the text will be associated with the current position on a page. It is
undefined what the DVI reading programs might do with such text, but local
sites may want to use this feature for such things as inserting halftone
illustrations, or for specifying lines and curves to be drawn. For example,
"\xsend{Halftone Fig1a}" might be used to include a halftone on file Fig1a
with its reference point at the current page position; and "\xsend{Endpoint 3}"
might be used twice in the file, with the meaning that a straight line should
be drawn between the two endpoints. The text must be at most 255 characters
long.

* \unskip is now legal in vertical mode; if the last item in the current
vertical list is glue, it appends the negative of this glue. (In horizontal
mode, \unskip removes the glue, as before.)

* \sqrt signs in TEX82 are positioned differently in their boxes:
The baseline now comes exactly at the bottom of the place where the vinculum
(i.e., the rule over the operand of \sqrt) is to be joined.
This means that no rounding errors will be possible and perfect alignment
will be obtained at all resolutions. Pre-82 versions of TEX will still work
(subject to rounding) if the height of the box is the thickness of the rule.

* There will be new parameters affecting the size of variable delimiters
that TEX chooses for \left and \right. Details are still being worked out.
A new way of using \char to specify variable delimiters is also going to
be introduced in place of the old 18-bit code; this will probably include
some way to use a character from any font family.

* The error transcript files are no longer called "errors.tmp". Your output
file and transcript file will be "paper.dvi" and "paper.err" if your first
line of TEX input specifies \input paper. The default name "texput" is
used whenever no other appropriate name has occurred before TEX reads
line two of its input. (TEX can't wait any longer, since line one has to
be put into the transcript file, and the transcript file has to have a
name before it gets information.)

* If the \moreout command is activated in an output routine, output will
be activated again. Previously there was no way to get more pages of
output than ejects in the file. For example, here is a way to print text
only on odd-numbered pages and to print only the page number on even-numbered
pages:
\output{\ifeven0{\vbox to \fullpageheight{\vfill\ctrline{\:a\count0}}}
	\else{ ... give your normal output routine followed by \moreout ... }
	\advcount0}

* \hyphenation{word list} can be used to override TEX's hyphenation algorithm;
for example, to specify hyphenation of the words "hyphenation" and
"exceptions" one can write
	\hyphenation{hy-phen-a-tion ex-cep-tions}
A new hyphenation algorithm devised by Frank Liang is used in TEX82; this
one extends much more readily to other languages. Words containing ligatures
can now be hyphenated automatically, even difficult words like "difficult".

* If two fonts are specified with the same name and point size, only one
will be loaded.

* \sfcode <char number> is the spacefactor code for that character, times 1000.
For example, the spacefactor code for period and question mark is normally
3000, for comma 1250, for right parenthesis 0 (meaning do not change the
space factor), and for most characters it is 1000. In TEX82, you also say
"\spacefactor 1234" instead of "\spacefactor 1.234".

* \uccode <char number> is the character code to use when converting to
upper case in the \uppercase function. For example, \uccode a = A.
(Probably nobody will change the default values unless a foreign alphabet
is being used.)

* \lccode <char number> is the character code to use when converting to
lower case in the \lowercase function or when trying to hyphenate a word
that contains upper case letters. For example, \lccode A = a.

* TEX82 has a new "help" facility available on error messages. If you type
"h" after an error, you will (usually) get further explanation of what
the error means, together with suggestions about how to proceed.